home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / misc_pto / mwpetz15 / pickfont.c < prev    next >
C/C++ Source or Header  |  1991-06-03  |  10KB  |  300 lines

  1. /* PICKFONT.C -- Font Picker Program */
  2.  
  3. #ifdef MEWEL
  4. #define FULLGDI
  5. #include <window.h>
  6. #include <string.h>
  7. #include <stdio.h>
  8. #undef NULL
  9. #define NULL 0
  10. #else
  11. #include <windows.h>
  12. #endif
  13. #include "pickfont.h"
  14.  
  15. long FAR PASCAL WndProc (HWND, unsigned, WORD, LONG) ;
  16. BOOL FAR PASCAL DlgProc (HWND, unsigned, WORD, LONG) ;
  17.  
  18. char    szAppName [] = "PickFont" ;
  19. DWORD   dwAspectMatch = 0L ;
  20. HWND    hDlg ;
  21. LOGFONT lf ;
  22. short   nMapMode = IDD_TEXT ;
  23.  
  24. int PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
  25.      HANDLE   hInstance, hPrevInstance ;
  26.      LPSTR    lpszCmdLine ;
  27.      int      nCmdShow ;
  28.      {
  29.      HWND     hWnd ;
  30.      MSG      msg ;
  31.      WNDCLASS wndclass ;
  32.  
  33.      if (!hPrevInstance) 
  34.           {
  35.           wndclass.style         = CS_HREDRAW | CS_VREDRAW;
  36.           wndclass.lpfnWndProc   = WndProc ;
  37.           wndclass.cbClsExtra    = 0 ;
  38.           wndclass.cbWndExtra    = 0 ;
  39.           wndclass.hInstance     = hInstance ;
  40.           wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
  41.           wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  42.           wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ;
  43.           wndclass.lpszMenuName  = NULL ;
  44.           wndclass.lpszClassName = szAppName ;
  45.  
  46.           if (!RegisterClass (&wndclass))
  47.                return FALSE ;
  48.           }
  49.      hWnd = CreateWindow (szAppName, "Font Picker",
  50.                          WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
  51.                          CW_USEDEFAULT, 0,
  52.                          CW_USEDEFAULT, 0,
  53.                          NULL, NULL, hInstance, NULL) ;
  54.  
  55.      ShowWindow (hWnd, nCmdShow) ;
  56.      UpdateWindow (hWnd) ;
  57.  
  58.      while (GetMessage (&msg, NULL, 0, 0))
  59.           {
  60.           if (hDlg == 0 || !IsDialogMessage (hDlg, &msg))
  61.                {
  62.                TranslateMessage (&msg) ;
  63.                DispatchMessage  (&msg) ;
  64.                }
  65.           }
  66.      return msg.wParam ;
  67.      }
  68.  
  69. void MySetMapMode (hDC)
  70.      HDC  hDC ;
  71.      {
  72.      if (nMapMode == IDD_LTWPS)
  73.           {
  74.           SetMapMode (hDC, MM_ANISOTROPIC) ;
  75.           SetWindowExt (hDC, 1440, 1440) ;
  76.           SetViewportExt (hDC, GetDeviceCaps (hDC, LOGPIXELSX),
  77.                                GetDeviceCaps (hDC, LOGPIXELSY)) ;
  78.           }
  79.      else
  80.           SetMapMode (hDC, MM_TEXT + nMapMode - IDD_TEXT) ;
  81.      }
  82.  
  83. void ShowMetrics (hDlg)
  84.      HWND hDlg ;
  85.      {
  86.      static TEXTMETRIC tm ;
  87.      static struct 
  88.           {
  89.           short nDlgID ;
  90.           short *pData ;
  91.           }
  92.           shorts [] = 
  93.           {
  94.           TM_HEIGHT,     &tm.tmHeight,
  95.           TM_ASCENT,     &tm.tmAscent,
  96.           TM_DESCENT,    &tm.tmDescent,
  97.           TM_INTLEAD,    &tm.tmInternalLeading,
  98.           TM_EXTLEAD,    &tm.tmExternalLeading,
  99.           TM_AVEWIDTH,   &tm.tmAveCharWidth,
  100.           TM_MAXWIDTH,   &tm.tmMaxCharWidth,
  101.           TM_WEIGHT,     &tm.tmWeight,
  102.           TM_OVER,       &tm.tmOverhang,
  103.           TM_DIGX,       &tm.tmDigitizedAspectX,
  104.           TM_DIGY,       &tm.tmDigitizedAspectY
  105.           } ;
  106.      static char    *szFamily [] = { "Don't Care", "Roman",  "Swiss",
  107.                                      "Modern",     "Script", "Decorative" } ;
  108.      BOOL           bTrans ;
  109.      char           szFaceName [LF_FACESIZE] ;
  110.      HDC            hDC ;
  111.      HFONT          hFont ;
  112.      short          i ;
  113.  
  114.      lf.lfHeight    = GetDlgItemInt (hDlg, IDD_HEIGHT, &bTrans, TRUE) ;
  115.      lf.lfWidth     = GetDlgItemInt (hDlg, IDD_WIDTH,  &bTrans, FALSE) ;
  116.      lf.lfWeight    = GetDlgItemInt (hDlg, IDD_WEIGHT, &bTrans, FALSE) ;
  117.  
  118.      lf.lfItalic    = (BYTE) (IsDlgButtonChecked (hDlg, IDD_ITALIC) ? 1 : 0) ;
  119.      lf.lfUnderline = (BYTE) (IsDlgButtonChecked (hDlg, IDD_UNDER)  ? 1 : 0) ;
  120.      lf.lfStrikeOut = (BYTE) (IsDlgButtonChecked (hDlg, IDD_STRIKE) ? 1 : 0) ;
  121.  
  122.      GetDlgItemText (hDlg, IDD_FACE, lf.lfFaceName, LF_FACESIZE) ;
  123.  
  124.      dwAspectMatch = IsDlgButtonChecked (hDlg, IDD_ASPECT) ? 1L : 0L ;
  125.  
  126.      hDC = GetDC (hDlg) ;
  127.      MySetMapMode (hDC) ;
  128.      SetMapperFlags (hDC, dwAspectMatch) ;
  129.  
  130.      hFont = SelectObject (hDC, CreateFontIndirect (&lf)) ;
  131.      GetTextMetrics (hDC, &tm) ;
  132.      GetTextFace (hDC, sizeof szFaceName, szFaceName) ;
  133.  
  134.      DeleteObject (SelectObject (hDC, hFont)) ;
  135.      ReleaseDC (hDlg, hDC) ;
  136.  
  137.      for (i = 0 ; i < sizeof shorts / sizeof shorts [0] ; i++)
  138.           SetDlgItemInt (hDlg, shorts[i].nDlgID, *shorts[i].pData, TRUE) ;
  139.  
  140.      SetDlgItemText (hDlg, TM_PITCH, tm.tmPitchAndFamily & 1 ?
  141.                                                       "VARIABLE":"FIXED") ;
  142.  
  143.      SetDlgItemText (hDlg, TM_FAMILY, szFamily [tm.tmPitchAndFamily >> 4]) ;
  144.      SetDlgItemText (hDlg, TM_CHARSET, tm.tmCharSet ? "OEM" : "ANSI") ;
  145.      SetDlgItemText (hDlg, TF_NAME, szFaceName) ;
  146.      }
  147.  
  148. BOOL FAR PASCAL DlgProc (hDlg, iMessage, wParam, lParam)
  149.      HWND     hDlg ;
  150.      unsigned iMessage ;
  151.      WORD     wParam ;
  152.      LONG     lParam ;
  153.      {
  154.      switch (iMessage)
  155.           {
  156.           case WM_INITDIALOG:
  157.                CheckRadioButton (hDlg, IDD_TEXT,   IDD_LTWPS,  IDD_TEXT) ; 
  158.                CheckRadioButton (hDlg, IDD_ANSI,   IDD_OEM,    IDD_ANSI) ;
  159.                CheckRadioButton (hDlg, IDD_QDRAFT, IDD_QPROOF, IDD_QDRAFT) ;
  160.                CheckRadioButton (hDlg, IDD_PDEF,   IDD_PVAR,   IDD_PDEF) ;
  161.                CheckRadioButton (hDlg, IDD_DONT,   IDD_DEC,    IDD_DONT) ;
  162.  
  163.                lf.lfEscapement    = 0 ;
  164.                lf.lfOrientation   = 0 ;
  165.                lf.lfOutPrecision  = OUT_DEFAULT_PRECIS ;
  166.                lf.lfClipPrecision = CLIP_DEFAULT_PRECIS ;
  167.  
  168.                ShowMetrics (hDlg) ;
  169.                                         /* fall through */
  170.           case WM_SETFOCUS:
  171.                SetFocus (GetDlgItem (hDlg, IDD_HEIGHT)) ;
  172.                return FALSE ;
  173.  
  174.           case WM_COMMAND:
  175.                switch (wParam)
  176.                     {
  177.                     case IDD_TEXT:
  178.                     case IDD_LOMET:
  179.                     case IDD_HIMET:
  180.                     case IDD_LOENG:
  181.                     case IDD_HIENG:
  182.                     case IDD_TWIPS:
  183.                     case IDD_LTWPS:
  184.                          CheckRadioButton (hDlg, IDD_TEXT, IDD_LTWPS, wParam) ;
  185.                          nMapMode = wParam ;
  186.                          break ;
  187.  
  188.                     case IDD_ASPECT:
  189.                     case IDD_ITALIC:
  190.                     case IDD_UNDER:
  191.                     case IDD_STRIKE:
  192.                          CheckDlgButton (hDlg, wParam, 
  193.                               IsDlgButtonChecked (hDlg, wParam) ? 0 : 1) ;
  194.                          break ;
  195.  
  196.                     case IDD_ANSI:
  197.                     case IDD_OEM:
  198.                          CheckRadioButton (hDlg, IDD_ANSI, IDD_OEM, wParam) ;
  199.                          lf.lfCharSet = (BYTE) (wParam == IDD_ANSI ? 0 : 255) ;
  200.                          break ;
  201.  
  202.                     case IDD_QDRAFT:
  203.                     case IDD_QDEF:
  204.                     case IDD_QPROOF:
  205.                          CheckRadioButton (hDlg, IDD_QDRAFT, IDD_QPROOF,
  206.                                                                       wParam) ;
  207.                          lf.lfQuality = (BYTE) (wParam - IDD_QDRAFT) ;
  208.                          break ;
  209.  
  210.                     case IDD_PDEF:
  211.                     case IDD_PFIXED:
  212.                     case IDD_PVAR:
  213.                          CheckRadioButton (hDlg, IDD_PDEF, IDD_PVAR, wParam) ;
  214.                          lf.lfPitchAndFamily &= 0xF0 ;
  215.                          lf.lfPitchAndFamily |= (BYTE) (wParam - IDD_PDEF) ;
  216.                          break ;
  217.  
  218.                     case IDD_DONT:
  219.                     case IDD_ROMAN:
  220.                     case IDD_SWISS:
  221.                     case IDD_MODERN:
  222.                     case IDD_SCRIPT:
  223.                     case IDD_DEC:
  224.                          CheckRadioButton (hDlg, IDD_DONT, IDD_DEC, wParam) ;
  225.                          lf.lfPitchAndFamily &= 0x0F ;
  226.                          lf.lfPitchAndFamily |= (BYTE) (wParam-IDD_DONT << 4) ;
  227.                          break ;
  228.  
  229.                     case IDD_OK:
  230.                          ShowMetrics (hDlg) ;
  231.                          InvalidateRect (GetParent (hDlg), NULL, TRUE) ;
  232.                          break ;
  233.                     }
  234.                break ;
  235.  
  236.           default:
  237.                return FALSE ;
  238.           }
  239.      return TRUE ;
  240.      }
  241.  
  242. long FAR PASCAL WndProc (hWnd, iMessage, wParam, lParam)
  243.      HWND         hWnd;
  244.      unsigned     iMessage;
  245.      WORD         wParam;
  246.      LONG         lParam;
  247.      {
  248.      static char  szText [] =
  249.                       "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPqQqRrSsTtUuVvWwXxYyZz" ;
  250.      static short xClient, yClient ;
  251.      HANDLE       hInstance ;
  252.      HDC          hDC ;
  253.      HFONT        hFont ;
  254.      FARPROC      lpfnDlgProc ;
  255.      PAINTSTRUCT  ps ;
  256.      RECT         rect ;
  257.      
  258.      switch (iMessage)
  259.           {
  260.           case WM_CREATE :
  261.                hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
  262.                lpfnDlgProc = MakeProcInstance (DlgProc, hInstance) ;
  263.                hDlg = CreateDialog (hInstance, szAppName, hWnd, lpfnDlgProc) ;
  264.                break ;
  265.  
  266.           case WM_SETFOCUS:
  267.                SetFocus (hDlg) ;
  268.                break ;
  269.  
  270.           case WM_PAINT:
  271.                hDC = BeginPaint (hWnd, &ps) ;
  272.                MySetMapMode (hDC) ;
  273.                SetMapperFlags (hDC, dwAspectMatch) ;
  274.                GetClientRect (hDlg, &rect) ;
  275.                rect.bottom += 1 ;
  276.                DPtoLP (hDC, (LPPOINT) &rect, 2) ;
  277.  
  278.                hFont = SelectObject (hDC, CreateFontIndirect (&lf)) ;
  279.  
  280.                TextOut (hDC, rect.left, rect.bottom, szText, 52) ;
  281.  
  282.                DeleteObject (SelectObject (hDC, hFont)) ;
  283.                EndPaint (hWnd, &ps) ;
  284.                break ;
  285.  
  286.           case WM_DESTROY:
  287.                PostQuitMessage (0) ;
  288.                break ;
  289.  
  290.           default :
  291.                return DefWindowProc (hWnd, iMessage, wParam, lParam) ;
  292.           }
  293.      return 0L ;
  294.      }
  295.  
  296. #ifdef MEWEL
  297. MEWELmain(0)
  298. #endif
  299.  
  300.